package jwtUtil

import (
	"github.com/dgrijalva/jwt-go"
	"time"
)

// 设置jwt密钥secret
var jwtSecret = []byte("yydq")

type Claims struct {
	UserID string `json:"userId"`
	jwt.StandardClaims
}

const expire_time = 24 * time.Hour

// GenerateToken 生成token的函数
func GenerateToken(userId string) (string, error) {
	nowTime := time.Now()
	expireTime := nowTime.Add(expire_time)

	claims := Claims{
		userId, // 自行添加的信息
		jwt.StandardClaims{
			ExpiresAt: expireTime.Unix(), // 设置token过期时间
			Issuer:    "admin",           // 设置jwt签发者
		},
	}
	// 生成token
	tokenClaims := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	token, err := tokenClaims.SignedString(jwtSecret)

	return token, err
}

// ParseToken 验证token的函数
func ParseToken(token string) (*Claims, error) {
	// 对token的密钥进行验证
	tokenClaims, err := jwt.ParseWithClaims(
		token,
		&Claims{},
		func(token *jwt.Token) (interface{}, error) {
			return jwtSecret, nil
		},
	)

	// 判断token是否过期
	if tokenClaims != nil {
		claims, _ := tokenClaims.Claims.(*Claims)
		return claims, nil
	}
	return nil, err
}
